﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace vue
{
    public partial class editionBibliotheque : Form
    {


        private Modele.Balise balise_selectionnee;
        private System.Windows.Forms.Button button_selectionnee;
        private List<System.Drawing.Bitmap> images_balises;
        private List<Modele.Balise> balises;
        private List<System.Windows.Forms.Button> buttons;
        private List<System.Windows.Forms.Label> labels;
        private System.Drawing.Color ancienne_couleur;
        private Vue vue;

        public editionBibliotheque(List<Modele.Balise> _balises ,List<System.Drawing.Bitmap> _images_balises,Vue _vue)
        {
            vue = _vue;
            buttons=new List<System.Windows.Forms.Button> ();
            labels= new List<System.Windows.Forms.Label> ();
            images_balises = _images_balises;
            balises = _balises;
            InitializeComponent();
            ancienne_couleur = button1.BackColor;
            miseAjour(0);
            Refresh();
        }




        //mise à jour
        public void miseAjour(int index)
        {
            
            buttons = new List<System.Windows.Forms.Button>();
            labels = new List<System.Windows.Forms.Label>();
            Refresh();

            System.Drawing.Size taille = button1.Size;
            IEnumerator it = images_balises.GetEnumerator();
            IEnumerator it2 = balises.GetEnumerator();
            //ajout de la balise par defaut
            it.MoveNext();
            it2.MoveNext();

            buttons.Add(button1);
            System.Drawing.Bitmap image_tampon = (System.Drawing.Bitmap)it.Current;
            image_tampon = new System.Drawing.Bitmap(image_tampon, taille);

            button1.BackgroundImage = image_tampon;
            //mise a jour du label
            System.Windows.Forms.Label label_suivant;
            semantique_balise.Text = ((Modele.Balise)it2.Current).getSemantique().getSignification();
            labels.Add(semantique_balise);

            System.Windows.Forms.Button button_precedent = button1; // sauvegarde du boutton précédent pour la recopie
            System.Windows.Forms.Button button_suivant;


            int hauteurGlobal = panel1.Size.Height;
            int largueurGlobal = panel1.Size.Width;
            int localisation_x;
            int localisation_y;
            int marge = 20;
            int delta = 0;

            while (it.MoveNext())
            {

                it2.MoveNext();

                button_suivant = new Button();
                button_suivant.Size = button_precedent.Size;

                localisation_x = button_precedent.Location.X;
                localisation_y = button_precedent.Location.Y;

                delta = marge + button_precedent.Size.Width;

                if (localisation_x + 2 * delta > largueurGlobal)
                {
                    localisation_x = marge;
                    localisation_y += delta;
                }
                else
                {
                    localisation_x += delta;
                }
                //positionnement
                button_suivant.Location = new System.Drawing.Point(localisation_x, localisation_y);


                //ajout de l'image de la balise et redimensionnement
                button_suivant.BackgroundImage = new System.Drawing.Bitmap((System.Drawing.Bitmap)it.Current, button_suivant.Size);
                button_suivant.Click += new EventHandler(button1_Click);
                panel1.Controls.Add(button_suivant);

                //mise a jour du label
                label_suivant = new Label();
                label_suivant.Location = new Point(localisation_x, localisation_y + button_precedent.Size.Width);
                panel1.Controls.Add(label_suivant); // ajout à la fenetre
                label_suivant.Text = ((Modele.Balise)it2.Current).getSemantique().getSignification();





                button_precedent = button_suivant;
                buttons.Add(button_suivant);
            }

            //mise a jour du boutton selectionnee

            miseAjourSelection(index);
           
        }

        private void miseAjourSelection(int index)
        {
            balise_selectionnee = balises[index];
            button_selectionnee = buttons[index];
            pictureBox1.BackgroundImage = new System.Drawing.Bitmap(images_balises[index], pictureBox1.Size);
            label2.Text = (balises[index]).getSemantique().getSignification();
        }


        private void editionBibliotheque_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            int index = buttons.IndexOf((Button)sender);
            button_selectionnee.BackColor=ancienne_couleur;
            Console.WriteLine(" index =  {0} ", index);
            if (index > -1)
            {
                miseAjourSelection(index);
            }
        }


        public static int lancerBibliotheque(List<Modele.Balise> _balises ,List<System.Drawing.Bitmap> _images_balises, Vue _vue)
        {
            editionBibliotheque input  = new editionBibliotheque(_balises,_images_balises, _vue);

             if (input.ShowDialog() != DialogResult.OK)
            {
                return 0;
            }
            else
            {
                return -1;
            }
        }

        private void significationChange_Click(object sender, EventArgs e)
        {
             string _dialogue="";
            _dialogue=Form3.InputBox();
            if(_dialogue!="")
            { //mise à jour de la semantique
                Modele.Semantique sem=balise_selectionnee.getSemantique();
                sem.setSignification(_dialogue);
                balise_selectionnee.setSemantique(sem);
                label2.Text = _dialogue;

                vue.addKeyWord(_dialogue);

            }
            miseAjourLabel();
           
        }

        private void miseAjourLabel()
        {

            IEnumerator it = labels.GetEnumerator();
            IEnumerator it2 = balises.GetEnumerator();

            while (it.MoveNext())
            {
                it2.MoveNext();
                ((Label)it.Current).Text = ((Modele.Balise)it2.Current).getSemantique().getSignification();
                ((Label)it.Current).Refresh();
            }
            
            Console.WriteLine("nombre de balises dans bibliothèque : {0}" , balises.Count );
            panel1.Refresh();
            
            Refresh();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Close();
        }






    }
}
